package Controlador;
/**
*
* @author Junior
*/

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;

import Modelo.*;
import Vistas.VentanaArbitro;
import Vistas.VentanaEquipo;


public class ControladorLiga implements ActionListener{
	
	Liga liga = new Liga();
	VentanaEquipo vistaequipo;
	boolean archivosCargados[] = new boolean[4];
	
	public void Generar()
	{
		int T = liga.getEquipos().size();
    	
    	Date fecha = new Date();
    	
    	for(int k = 0;k < 2;k++)
    	{
    		ArrayList<Integer>l = new ArrayList<Integer>();
        	for(int i = 0;i < T;i++)
        		l.add(i);
        	
        	System.out.println("**********************");
        	
	    	for(int i = 0;i < T-1;i++)
	    	{
	    		int x = l.get(0);
	    		
	    		l.remove(0);
	    		
	    		l.add(x);
	    		
	    	
	    		fecha.setDate(fecha.getDate() + 1);
	    		
	    		
	    		// if(fecha.getDay() == 1)
	    		//	fecha.setDate(fecha.getDate() + 1);
 	    		
	    		System.out.print(fecha.toString() + "   ");
	    		
	    		
	    		if(i%2 == 0)
	    		{
	    			for(int j = 0;j < T;j+= 2)
	    			{
	    				Partido p = new Partido();
	    				
	    				p.setFecha(fecha);
	    				
	    				boolean []impulsoresVisitante = new boolean [9];
	    				boolean []impulsoreshome = new boolean [9];
	    				boolean []homronerosVisitante = new boolean [9];
	    				boolean []homroneroshome = new boolean [9];
	    				
	    				for(int c = 0;c < 9;c++)
	    				{
	    					impulsoreshome[c] = false;
	    					impulsoresVisitante[c] = false;
	    					homroneroshome[c] = false;
	    					homronerosVisitante[c] = false;
	    				}
	    				
	    				Equipo visitante = liga.getEquipos().get(j);
	    				Equipo home = liga.getEquipos().get(l.get(j));
	    				Umpire umpire = liga.getUmpire().get( (int)(liga.getUmpire().size() * Math.random()) );
	    				
	    				umpire.setCantJuegos(umpire.getCantJuegos() + 1);
	    				
	    			    p.setVisitante(visitante);
	    			 
	    			    p.setHomeClub(home);
	    			    
	    			    p.setUmpire(umpire);
	    			    
	    			    int carrerasVisitante = (int)(15 * Math.random());
	    			    
	    			    int carrerasHome = (int)(15 * Math.random());
	    			    
	    			    while(carrerasVisitante == carrerasHome)
	    			    {
	    			    	carrerasVisitante += (int)(15 * Math.random());
	    			    	carrerasHome += (int)(15 * Math.random());
	    			    
	    			    	p.setInnings(p.getInnings() + 1);
	    			    }
	    			    
	    			    
	    			    for(int c = 0;c < carrerasVisitante;c++)
	    			    {
	    			    	int r = (int)Math.random() * 8;
	    			    	
	    			    	visitante.getJugadores()[r].setCarrerasImpulsadas(
	    			    			visitante.getJugadores()[r].getCarrerasImpulsadas() + 1);
	    			    
	    			        impulsoresVisitante[r] = true;
	    			    
	    			    }
	    			    
	    			    for(int c = 0;c < carrerasHome;c++)
	    			    {
	    			    	int r = (int)Math.random() * 8;
	    			    	
	    			    	home.getJugadores()[r].setCarrerasImpulsadas(
	    			    			home.getJugadores()[r].getCarrerasImpulsadas() + 1);
	    			   
	    			    	impulsoreshome[r] = true;
	    			    }
	    			    
	    			    ArrayList<Jugador>impulsadoresCarrerasHome = new ArrayList<Jugador>();
	    			    ArrayList<Jugador>impulsadoresCarrerasVisitante = new ArrayList<Jugador>();
	    			    
	    			    for(int c = 0;c < 9;c++)
	    			    {
	    			    	if(impulsoreshome[c])
	    			    		impulsadoresCarrerasHome.add(home.getJugadores()[c]);
	    			       			    
	    			    	if(impulsoresVisitante[c])
	    			    		impulsadoresCarrerasVisitante.add(visitante.getJugadores()[c]);
	    			    }
	    			    
	    			    p.setJugadoresCarrerasHome(impulsadoresCarrerasHome);
	    			    p.setJugadoresCarrerasVisitante(impulsadoresCarrerasVisitante);
	    			    
	    			    
	    			    // HomeRun
	    			    
	    			    int homeRunsHome = (int)(Math.random() * Math.min(2,carrerasHome));
	    			    int homeRunsVisitante = (int)(Math.random() * Math.min(2,carrerasVisitante));
	    			    
	    			    for(int c = 0;c < homeRunsHome;c++)
	    			    {
	    			    	int r = (int)Math.random() * 8;
	    			    	
	    			    	while(!impulsoreshome[r])
	    			    		r = (int)Math.random() * 8;
	    			    
	    			    	homroneroshome[r] = true;
	    			    
	    			    	home.getJugadores()[r].setHomeruns(home.getJugadores()[r].getHomeruns() + 1);
	    			    }
	    			    
	    			    for(int c = 0;c < homeRunsVisitante;c++)
	    			    {
	    			    	int r = (int)Math.random() * 8;
	    			    	
	    			    	while(!impulsoresVisitante[r])
	    			    		r = (int)Math.random() * 8;
	    			    
	    			    	homronerosVisitante[r] = true;
	    			    
	    			    	visitante.getJugadores()[r].setHomeruns(visitante.getJugadores()[r].getHomeruns() + 1);
	    			    }
	    			  
	    			    ArrayList<Jugador>homeRunsCarrerasHome = new ArrayList<Jugador>();
	    			    ArrayList<Jugador>homeRunsCarrerasVisitante = new ArrayList<Jugador>();
	    			    
	    			    for(int c = 0;c < 9;c++)
	    			    {
	    			    	if(homroneroshome[c])
	    			    		homeRunsCarrerasHome.add(home.getJugadores()[c]);
	    			       			    
	    			    	if(homronerosVisitante[c])
	    			    		homeRunsCarrerasVisitante.add(visitante.getJugadores()[c]);
	    			    }
	    			    
	    			    p.setJugadoresCuadrangularesHome(homeRunsCarrerasHome);
	    			    p.setJugadoresCuadrangularesVisitante(homeRunsCarrerasVisitante);
	    			    
	    			    
	    			    p.setCarrerasHome(carrerasHome);
	    			    p.setCarrerasVisitante(carrerasVisitante);
	    			    
	    			}	
	    			
	    			//System.out.printf("(%d,%d) ",  j  ,  l.get(j)  );
	    			
	    				//System.out.print("(" + j + "," + l.get(j) + ")");
	        		
	    		}
	    		else
	    		{
	    			for(int j = 0;j < T/2;j++)
	    			{
	    				
	    				System.out.printf("(%d,%d) ",j,l.get(j)); 
	    			}
	    		}
	    		
	    		System.out.println("\n---");
	    		
	    		
	    		fecha.setDate(fecha.getDate() + 1);	    		
	    		System.out.print(fecha.toString() + "   ");
	    		
	    		if(i%2 == 0)
	    		{
	    			for(int j = 0;j < T;j+= 2)
	        		{
	    				System.out.printf("(%d,%d) ",l.get(j),j); 
	        		}
	        		
	    		}
	    		else
	    		{
	    			for(int j = 0;j < T/2;j++)
	        		{
	    				System.out.printf("(%d,%d) ",l.get(j),j); 
	        		}
	        		
	    		}
	    		
	    	}
    	}
	}
	
	public ControladorLiga() {
		super();
		// TODO Auto-generated constructor stub
	
		vistaequipo = new VentanaEquipo();
		vistaequipo.setLocationRelativeTo(null);
		vistaequipo.setVisible(true);
		vistaequipo.agregarListener(this);
		

		for(int i = 0;i < archivosCargados.length;i++)
			archivosCargados[i] = false;
	}

	public void cargarEquipo(String ruta) throws FileNotFoundException, IOException
	{
		Equipo equipo = new Equipo();
		
		equipo.setNombre(vistaequipo.getjTextNombre().toString());
		equipo.setCodigo(vistaequipo.getjTextCodigo().toString());
		equipo.setAnoFundacion(Integer.parseInt(vistaequipo.getjTextAnFund().getText().toString()));
		equipo.setCiudad(vistaequipo.getjTextCiudad().toString());
		
		Jugador []jugadores = null;
		
		jugadores = cargarJugadores(ruta);
		
		equipo.setJugadores(jugadores);
		
		
		for(int i = 0;i < 9;i++)
		{
			System.out.println(jugadores[i].getNombre());
		}
		
		liga.agregarEquipo(equipo);
	}
	
	public Jugador[] cargarJugadores(String doc) throws FileNotFoundException, IOException{

    	Jugador[] arrayJugador = new Jugador[9];
    
    	File Archi;
        DataInputStream lec;
        Archi=new File(doc);
        lec=new DataInputStream(new FileInputStream(Archi));
        
    	
    for(int i=0; i<arrayJugador.length; i++){
    	    
        arrayJugador[i] = new Jugador();
        arrayJugador[i].setNombre(lec.readLine());
        arrayJugador[i].setApellido(lec.readLine());
        arrayJugador[i].setCedula(lec.readLine());
        arrayJugador[i].setFechaN(lec.readLine());
        arrayJugador[i].setPosicion(lec.readLine());
      
     }

    return arrayJugador;
}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		if(arg0.getActionCommand().equals("Agregar"))
	    {
			if(vistaequipo.getNombre().toString().equals("") || vistaequipo.getCodigo().toString().equals("")|| vistaequipo.getanoFundacion().toString().equals(""))
		    	vistaequipo.mostrarMensaje("Faltan Datos");
			else
			try {
				
				String str = "src/Lista Jugadores " + (vistaequipo.getjComboJugadores().getSelectedIndex() + 1) + ".txt";
	
				if(archivosCargados[vistaequipo.getjComboJugadores().getSelectedIndex()] == false)
				{
				    archivosCargados[vistaequipo.getjComboJugadores().getSelectedIndex()] = true;
				    cargarEquipo(str);
				    vistaequipo.limpiarCampos();
				    vistaequipo.mostrarMensaje("Equipo cargado con exito!");
				}
				else
					vistaequipo.mostrarMensaje("ya se cargo este archivo!");
			}
			catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	    }
		else vistaequipo.salir();
	}


}
